/*
 * @Author: LAPTOP-STS5K12N\icey 2237665219@qq.com
 * @Date: 2025-01-26 22:00:39
 * @LastEditors: LAPTOP-STS5K12N\icey 2237665219@qq.com
 * @LastEditTime: 2025-01-31 19:44:45
 * @FilePath: \OLED\csrc\ui_manage.h
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AEd
 */
#ifndef _IO_LOGIC_H
#define _IO_LOGIC_H

/*include************************************************ */
#include "main.h"


/*
    使能输出回调
*/
#define USE_CALLBACK

/*
    逻辑状态枚举
*/
typedef enum __Lo_Logic_State_t
{
    Lo_Logic_State_Off,     // 逻辑状态：关闭
    Lo_Logic_State_Delay,   // 逻辑状态：延时中
    Lo_Logic_State_On,      // 逻辑状态：开启中
    Lo_Logic_State_Interval // 逻辑状态：间隔中
} Lo_Logic_State_t;

/*
    逻辑类型枚举
*/
typedef enum __Lo_Logic_Type_t
{
    Lo_Logic_Type_Input,  // 逻辑类型：输入
    Lo_Logic_Type_Output, // 逻辑类型：输出
} Lo_Logic_Type_t;

/*
    逻辑结构体
*/
typedef struct __Lo_Logic_t
{
    uint32_t interval_time; // 间隔时间计数器
    uint32_t keep_time;     // 保持时间计数器
    uint32_t delay_time;    // 延时时间计数器

    Lo_Logic_Type_t type;      // 逻辑类型：输入或输出
    GPIO_PinState vaild_state; // 逻辑状态：有效电平
    Lo_Logic_State_t state;    // 逻辑状态：关闭、延时、开启、间隔
    union
    {
        struct
        {
            GPIO_TypeDef *GPIOx;                   // 输入时使用的GPIO端口
            uint16_t GPIO_Pin;                     // 输入时使用的GPIO引脚
        } input;
        struct
        {
            GPIO_TypeDef *GPIOx;                    // 输出时使用的GPIO端口
            uint16_t GPIO_Pin;                      // 输出时使用的GPIO引脚

        } output;
    } mapping;
#ifdef USE_CALLBACK
       void (*callback)(uint8_t index); // 输出逻辑回调函数
#endif
} Lo_Logic_t;

/*
    逻辑初始化
*/
void Lo_Logic_Init(void);

/*
    @brief 逻辑管理
*/
void Lo_Logic_Manage(void);

/*
    获取逻辑项数量
*/
uint8_t Lo_Logic_GetNum(void);

/*
    获取逻辑项
*/
Lo_Logic_t *Get_Lo_Logic_Item(uint8_t index);

#endif
